This code loads packages used in R and provide a path to data folder.
This chunk of code creates abbreviations for names of the key agencies.
mapagency <- data.table(agency = "environmental protection agency", label = "EPA") %>%
rbind(list("department of health and human services", "DHHS")) %>%
rbind(list("department of transportation", "Transportation")) %>%
rbind(list("department of commerce", "Commerce")) %>%
rbind(list("securities and exchange commission", "SEC")) %>%
rbind(list("department of interior", "DOI")) %>%
rbind(list("department of agriculture", "USDA")) %>%
rbind(list("department of energy", "DOE")) %>%
rbind(list("department of labor", "DOL")) %>%
rbind(list("department of treasury", "Treasury")) %>%
rbind(list("department of justice", "DOJ")) %>%
rbind(list("nuclear regulatory commission", "NRC")) %>%
rbind(list("federal communications commission", "FCC")) %>%
rbind(list("department of housing and urban developm", "HUD")) %>%
rbind(list("federal reserve system", "FRS")) %>%
rbind(list("international trade commission", "ITC")) %>%
rbind(list("federal energy regulatory commission", "FERC")) %>%
rbind(list("commodity futures trading commission", "CFTC")) %>%
rbind(list("department of veteran affairs", "DVA")) %>%
rbind(list("consumer financial protection bureau", "CFPB")) %>%
rbind(list("department of defense", "Defense")) %>%
rbind(list("social security administration", "SSA"))
setkey(mapagency, agency)
mapagency %>%
flextable() %>%
autofit() %>%
theme_booktabs()agency | label |
|---|---|
commodity futures trading commission | CFTC |
consumer financial protection bureau | CFPB |
department of agriculture | USDA |
department of commerce | Commerce |
department of defense | Defense |
department of energy | DOE |
department of health and human services | DHHS |
department of housing and urban developm | HUD |
department of interior | DOI |
department of justice | DOJ |
department of labor | DOL |
department of transportation | Transportation |
department of treasury | Treasury |
department of veteran affairs | DVA |
environmental protection agency | EPA |
federal communications commission | FCC |
federal energy regulatory commission | FERC |
federal reserve system | FRS |
international trade commission | ITC |
nuclear regulatory commission | NRC |
securities and exchange commission | SEC |
social security administration | SSA |
### this file includes top-100 words per topic
### it is a list of 100 tables
### PROVIDED in the replication package
wordcloudlist <- "wordcloudlist.rds" %>%
paste0(data_path, .) %>%
readRDS()
wordcloudlist[[1]] %>%
head(20) %>%
flextable() %>%
autofit()topic | term | beta |
|---|---|---|
1 | fee | 0.109794177 |
1 | exchang | 0.033467054 |
1 | market | 0.022850266 |
1 | order | 0.021793327 |
1 | tier | 0.019684188 |
1 | charg | 0.019139130 |
1 | pilot | 0.018887929 |
1 | propos | 0.014873456 |
1 | per | 0.014854498 |
1 | execut | 0.013977665 |
1 | rebat | 0.013944487 |
1 | will | 0.013655370 |
1 | custom | 0.013271459 |
1 | member | 0.012944424 |
1 | liquid | 0.012669525 |
1 | schedul | 0.012636348 |
1 | option | 0.011816390 |
1 | rout | 0.009171673 |
1 | particip | 0.009015264 |
1 | month | 0.008792502 |
### this file includes labels of all 100 topics
### PROVIDED in the replication package
labels <- "topic_labels_ML_KV_JK.csv" %>%
paste0(data_path, .) %>%
fread(select = c("ShortLabel", "Topic"))
labels %>%
head(10) %>%
flextable() %>%
autofit()ShortLabel | Topic |
|---|---|
Penalties: Freedom of Information | 1 |
Penalties: banks | 2 |
Endangered Species | 3 |
EBP | 4 |
Securities: invt cos | 5 |
Grants: housing & community devt | 6 |
Env: data & studies | 7 |
Veterans | 8 |
Government employees | 9 |
EP (agriculture) | 10 |
### this is the main file
### SYNTHETIC version is included in the replication package
companyyear <- "companyyear_final.rds" %>%
paste0(data_path, .) %>%
readRDS() %>%
select("cik", "name", "year", "FF12", "regul.disp", "topic.disp", "Topic29")
companyyear %>%
head(10) %>%
flextable() %>%
autofit()cik | name | year | FF12 | regul.disp | topic.disp | Topic29 |
|---|---|---|---|---|---|---|
20 | K TRON INTERNATIONAL INC | 1,996 | 6 | 0.8399150 | 0.9274241 | 0.00055921461 |
20 | K TRON INTERNATIONAL INC | 1,997 | 6 | 0.8522455 | 0.9276763 | 0.00100173634 |
20 | K TRON INTERNATIONAL INC | 1,999 | 6 | 0.8283158 | 0.9321834 | 0.00006559097 |
20 | K TRON INTERNATIONAL INC | 2,001 | 6 | 0.8484812 | 0.9339354 | 0.00006591958 |
20 | K TRON INTERNATIONAL INC | 2,003 | 6 | 0.8347048 | 0.9406899 | 0.00004764173 |
20 | K TRON INTERNATIONAL INC | 2,004 | 6 | 0.8093653 | 0.9400247 | 0.00043147407 |
20 | K TRON INTERNATIONAL INC | 2,005 | 6 | 0.8144986 | 0.9404953 | 0.00734362186 |
20 | K TRON INTERNATIONAL INC | 2,006 | 6 | 0.8025276 | 0.9428131 | 0.01438246432 |
20 | K TRON INTERNATIONAL INC | 2,007 | 6 | 0.7887117 | 0.9455084 | 0.00580932147 |
20 | K TRON INTERNATIONAL INC | 2,008 | 6 | 0.8043702 | 0.9425870 | 0.00396724641 |
### this file shows topic distribution over agency-years
### PROVIDED in the replication package
topicagencyyear <- "topicagencyyear.csv" %>%
paste0(data_path, .) %>%
fread()
topicagencyyear %>%
head(10) %>%
flextable() %>%
autofit()TopicNumber | agency | year | TopicWords | AllWords | AgencyPercent |
|---|---|---|---|---|---|
1 | securities and exchange commission | 1,995 | 6,447.6060 | 52,772.61 | 0.122177134 |
1 | department of agriculture | 1,995 | 3,694.0364 | 52,772.61 | 0.069999126 |
1 | environmental protection agency | 1,995 | 4,929.8400 | 52,772.61 | 0.093416645 |
1 | federal communications commission | 1,995 | 3,835.1592 | 52,772.61 | 0.072673293 |
1 | department of justice | 1,995 | 2,713.3791 | 52,772.61 | 0.051416431 |
1 | commodity credit corporation | 1,995 | 100.6776 | 52,772.61 | 0.001907762 |
1 | general services administration | 1,995 | 185.5532 | 52,772.61 | 0.003516090 |
1 | department of health and human services | 1,995 | 2,890.8016 | 52,772.61 | 0.054778450 |
1 | department of treasury | 1,995 | 1,413.3309 | 52,772.61 | 0.026781525 |
1 | national credit union administration | 1,995 | 106.9971 | 52,772.61 | 0.002027512 |
### this file include data obtained from Federal Register
### PROVIDED in the replication package
fedreg <- "fedreg_with_words.csv" %>%
paste0(data_path, .) %>%
fread()
fedreg %>%
head(10) %>%
flextable() %>%
autofit()document_number | type | date | year | agency | Nagencies | nwords |
|---|---|---|---|---|---|---|
94-32388 | Presidential Document | 1995-01-03 | 1,995 | executive office of the president | 1 | 174 |
94-32287 | Rule | 1995-01-03 | 1,995 | department of agriculture | 1 | 366 |
94-32288 | Rule | 1995-01-03 | 1,995 | department of agriculture | 1 | 288 |
94-32036 | Rule | 1995-01-03 | 1,995 | department of transportation | 1 | 351 |
94-32250 | Rule | 1995-01-03 | 1,995 | securities and exchange commission | 1 | 239 |
94-32126 | Rule | 1995-01-03 | 1,995 | international trade commission | 1 | 2,679 |
94-32127 | Rule | 1995-01-03 | 1,995 | international trade commission | 1 | 1,334 |
94-32331 | Rule | 1995-01-03 | 1,995 | department of treasury | 1 | 2,237 |
94-31665 | Rule | 1995-01-03 | 1,995 | department of treasury | 1 | 1,041 |
94-32197 | Rule | 1995-01-03 | 1,995 | department of justice | 1 | 120 |
### this file include results of placebo test
### PROVIDED in the replication package
### Code for random simulations is also provided
firm_placebo <- "firm_placebo.csv" %>%
paste0(data_path,.) %>%
fread
firm_placebo %>%
head(10) %>%
flextable() %>%
autofit()Estimate | Std. Error | t value | Pr(>|t|) | variable | yvar | iter |
|---|---|---|---|---|---|---|
0.055692551 | 0.014080436 | 3.9553144 | 0.000256366381497640991299 | regul.disp_norm | lead.sga_at_norm | 0 |
0.033443098 | 0.025282297 | 1.3227872 | 0.192306446873755004789430 | regul.complex.log_norm | lead.sga_at_norm | 0 |
0.045634481 | 0.018924892 | 2.4113469 | 0.019854553478668199306689 | topic.disp_norm | lead.sga_at_norm | 0 |
-0.014225601 | 0.011128463 | -1.2783078 | 0.207417814681061019044250 | LogWords10K_norm | lead.sga_at_norm | 0 |
0.068140415 | 0.030279498 | 2.2503812 | 0.029144311243643600956021 | ppe_at_norm | lead.sga_at_norm | 0 |
-0.023155087 | 0.009721726 | -2.3817876 | 0.021329156235213701103826 | ebitda_at_norm | lead.sga_at_norm | 0 |
-0.317033602 | 0.049643457 | -6.3862112 | 0.000000069891455211498988 | log_sale_norm | lead.sga_at_norm | 0 |
0.110807761 | 0.008201900 | 13.5100115 | 0.000000000000000008434914 | tobin_norm | lead.sga_at_norm | 0 |
-0.030862211 | 0.017811584 | -1.7327045 | 0.090315831480421007726456 | regul.disp_norm | lead.tfp_norm | 0 |
0.006716982 | 0.020473255 | 0.3280857 | 0.744439126311973065064365 | regul.complex.log_norm | lead.tfp_norm | 0 |
data <- fedreg[year %in% 1995:2019 & type %in% c("Notice", "Proposed Rule", "Rule"), list(Words = sum(nwords)), by = c("year,type")]
library(ggplot2)
plot <- ggplot(data, aes(x = year, y = Words, col = type)) +
geom_line() +
ylab("Words in Federal Register") +
theme_minimal() +
theme(axis.title.x = element_blank()) +
scale_color_brewer(palette = "Paired") +
scale_y_continuous(labels = comma,limits = c(0, 8*10^6)) +
guides(color = guide_legend(title = "Document Type", ncol = 3)) +
theme(legend.position='bottom')
print(plot)make_cloud <- function(i) {
wordcloud(wordcloudlist[[i]]$term, wordcloudlist[[i]]$beta, colors = brewer.pal(8, "Dark2"), random.order = F) %>%
print()
}
make_cloud(3)## NULL
## NULL
## NULL
## NULL
data <- topicagencyyear[, list(disp = 1 - sum(AgencyPercent^2)), by = c("year,TopicNumber")]
p <- ggplot(data = data, aes(disp)) +
geom_histogram(aes(y = 0.01 * ..density..), fill = "darkgreen", binwidth = 0.01, color = "black") +
theme_minimal() +
xlab("Dispersion of Topics Across Agencies") +
ylab("Density [% of topic-year obs]")
print(p)p <- ggplot(data = companyyear, aes(topic.disp)) +
geom_histogram(aes(y=0.0025*..density..),fill="steelblue", col = "darkblue", bins = 30) +
theme_minimal() + xlab("Dispersion of Topics Within Each Firm-Year") +
ylab("Density [% of Firm-Year Obs]")
print(p)p <- ggplot(data = companyyear, aes(regul.disp)) +
geom_histogram(aes(y = 0.005 * ..density..), fill = "purple", binwidth = 0.005, color = "purple4") +
theme_minimal() +
xlab("Regulatory Fragmentation") +
ylab("Density [% of firm-year obs]")
print(p)### generate palette with 12 colors
pl <- distinctColorPalette(12)
## create labels for FF12 industries
labs <- data.table(ind = 1:12, lab = c("1 NoDur", "2 Durbl", "3 Manuf", "4 Enrgy ", "5 Chems", "6 BusEq", "7 Telcm", "8 Utils", "9 Shops", "10 Hlth", "11 Money", "12 Other"))
## add labels to company-year file
companyyear$FF12_lab <- factor(labs[match(companyyear$FF12, labs$ind)]$lab, levels = labs$lab)
companyyear[, mean(regul.disp), by = "FF12_lab,year"] |>
ggplot(aes(y = V1, x = year, col = FF12_lab, group = FF12_lab)) +
geom_line() +
theme_minimal() +
theme(
axis.line = element_line(size = rel(1), colour = "black"),
panel.grid.major = element_line(colour = "#d3d3d3"),
panel.grid.minor = element_blank(),
panel.border = element_blank(), panel.background = element_blank(),
plot.title = element_text(size = rel(1.5), face = "bold"),
axis.text.x = element_text(colour = "black", size = rel(1.3)),
axis.title.x = element_text(colour = "black", size = rel(1.3)),
axis.title.y = element_text(colour = "black", size = rel(1.3)),
axis.text.y = element_text(colour = "black", size = rel(1.4))
) +
theme(plot.title = element_text(hjust = 0.5)) +
xlab("Year") +
ylab("Regulatory Fragmentation") +
scale_color_manual(values = pl, name = "Industry") +
ylim(0.72, 0.88)pl <- distinctColorPalette(length(unique(companyyear[FF12 == 1]$cik)))
companyyear[FF12 == 1] |>
ggplot(aes(y = regul.disp, x = year, col = as.character(cik), group = cik)) +
geom_line(alpha = 0.5, size = 0.5) +
theme_minimal() +
theme(legend.position = "none") +
theme(
axis.line = element_line(size = rel(1), colour = "black"),
panel.grid.major = element_line(colour = "#d3d3d3"),
panel.grid.minor = element_blank(),
panel.border = element_blank(), panel.background = element_blank(),
plot.title = element_text(size = rel(1.5), face = "bold"),
axis.text.x = element_text(colour = "black", size = rel(1.3)),
axis.title.x = element_text(colour = "black", size = rel(1.3)),
axis.title.y = element_text(colour = "black", size = rel(1.3)),
axis.text.y = element_text(colour = "black", size = rel(1.4))
) +
theme(plot.title = element_text(hjust = 0.5)) +
xlab("Year") +
ylab("Regulatory Fragmentation") +
scale_color_manual(values = pl) +
ylim(0.72, 0.88)difgraph <- function(int1, int2, lab1, lab2) {
### generate agency dispersion file
agencydisp <- topicagencyyear[, list(AgencyDisp = 1 - sum(AgencyPercent^2)), by = "TopicNumber,year"]
### measure interval1 and interval2 dispersions by topic
increases <- agencydisp[, list(
regul1 = mean(AgencyDisp[year %in% int1]),
regul2 = mean(AgencyDisp[year %in% int2])), by = TopicNumber]
### estimate change between interval2 and interval1
increases[, change := regul2 - regul1]
### order observations by change
setkey(increases, change)
### add labels to data.table with increases
for(tp in as.numeric(1:100)) increases[TopicNumber == tp, label1 := labels$ShortLabel[match(tp, labels$Topic)]]
### add topicnumber to the start of the label
increases[, label1 := paste0(TopicNumber, ".", label1)]
### rank all observations (they are ordered by change)
increases[, rank := 1:.N]
### split label into several lines, 15 characters each
increases[, label1 := paste0(strsplit(as.character(label1), "(?<=.{15})", perl = TRUE)[[1]], collapse = "\n"),
by = rank]
### look at top and bottom 3 topics by change
increases <- increases[rank %in% c(1:3, 98:100)]
### set layers (they will determine the order)
layers <- increases$label[c(6:4, 1:3)]
### set rank as data.table key
setkey(increases, rank)
### select variables and melt into longer data.table (for ggplot2)
increases <- increases %>%
select("TopicNumber", "label1", "regul1", "regul2", "rank") %>%
melt(id.vars = c("TopicNumber", "label1", "rank"))
### rename columns
colnames(increases) <- c("topic", "label", "rank", "year", "reguldisp")
### divide between increases and decreases
increases[rank %in% 1:3, type := "2. Decrease"]
increases[rank %in% 98:100, type := "1. Increase"]
### put labels to word count before/after
increases[year == "regul1", year := lab1]
increases[year == "regul2", year := lab2]
### add layers (determine the order)
increases$label <- factor(increases$label, levels = layers)
### plot graph set up
plot <- increases %>%
ggplot(aes(x = label, y = reguldisp, fill = year)) +
geom_bar(stat = "identity", position = "dodge") +
facet_wrap(~type, scales = "free_x") +
theme_minimal() +
theme(legend.position='bottom', text=element_text(family="Georgia"),
legend.title = element_text(size = rel(0.75)),
legend.text = element_text(size = rel(0.75)),
axis.title.x = element_blank()) +
guides(fill = guide_legend(title = "Period")) +
scale_fill_brewer(palette = "Paired") +
ylab("Dispersion Across Agencies")
return(plot)
}
difgraph(2014:2016, 2017:2019, "2014-2016", "2017-2019") %>% print()top_agencies <- function(years, TP) {
### set colors
my_palette <- c(
"#E74C3C", "#3498DB", "#2ECC71", "#9B59B6", "#F1C40F",
"#E67E22", "#1ABC9C", "#000000", "#C0392B", "#2980B9",
"#ade5e5", "#8E44AD"
)
### sort data
sorted_data <- topicagencyyear[order(-topicagencyyear$AgencyPercent), ]
### select top-10 agencies based on sorting
top_10_agencies <- sorted_data[year == min(years) & TopicNumber == TP, agency][1:10]
### select years and topic from topicagencyyear table
data <- topicagencyyear[year %in% years & TopicNumber == TP]
### create shorter names for agencies using mapagency table
data$Agency <- mapagency$label[match(data$agency, mapagency$agency)]
### some agency names are short and we can use them as labels
data[is.na(Agency), Agency := agency]
### limit sample to top10 agencies
data <- data[agency %in% top_10_agencies]
### this is the way how we can set an order to the legend in ggplot2
data$Agency <- factor(data$Agency, levels = unique(data[match(top_10_agencies, data$agency), ]$Agency))
### plot the graph
pl <- ggplot(data, aes(x = Agency, y = TopicWords, fill = Agency)) +
geom_bar(stat = "identity") +
facet_wrap(~year) +
scale_fill_manual(values = my_palette) +
scale_y_continuous(labels = comma) +
ylab("Words written by an agency on selected topic") +
theme(
axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
legend.position = "bottom",
axis.line = element_line(size = rel(1), colour = "black"),
panel.grid.major = element_line(colour = "#d3d3d3"),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
plot.title = element_text(size = rel(1.5), face = "bold", hjust = 0.5),
axis.title.y = element_text(colour = "black", size = rel(1.2)),
axis.text.y = element_text(colour = "black", size = rel(1.2))
)
return(pl)
}
top_agencies(2014:2019, 29)plot_top_companies <- function(years, TP, shockyr) {
my_palette <- c(
"#E74C3C", "#3498DB", "#2ECC71", "#9B59B6", "#F1C40F",
"#E67E22", "#1ABC9C", "#000000", "#C0392B", "#2980B9",
"#ade5e5", "#8E44AD", "#ade5e5", "#8E44AD"
)
### select years and variables from the main file
data <- companyyear[year %in% years] %>% select("cik", "year", "name", TP, "regul.disp")
### order data
setkey(data, cik, year)
### count number of observations per CIK
data[, n1 := .N, by = cik]
### drop companies with less than 5 obs (IPOs or exits)
data <- data[n1 > 5]
### shorter the name of the company, make it robust to the name change
data[, name := substr((name[1]), 1, 35), by = cik]
### set order by the frequency of selected topic
data <- data[order(data[[4]], decreasing = T)]
### number companies by the frequency of the key topic per year
data[, n2 := 1:.N, by = "year"]
### order by company and year
setkey(data, name, year)
### fix order of the companies at the start of the sample
### (i.e. company #1 is company with higher weight on TP topic)
data[, n3 := n2[1], by = name]
### keep top12 companies (based on the topic frequency in the first year)
data <- data[n3 %in% 1:12]
### this is the way company names will be ordered in the legend
data$name <- factor(data$name, levels = unique(data[order(n3)]$name))
### plot the graph
pl <- data %>%
ggplot(aes(x = year, y = regul.disp, group = name, col = name, fill = name)) +
geom_line(alpha = 0.7, size = 1.5) +
theme(legend.position = "bottom") +
theme(
axis.line = element_line(size = rel(1), colour = "black"),
panel.grid.major = element_line(colour = "#d3d3d3"),
panel.grid.minor = element_blank(),
panel.border = element_blank(), panel.background = element_blank(),
plot.title = element_text(size = rel(1.5), face = "bold"),
axis.text.x = element_text(colour = "black", size = rel(1.0)),
axis.title.x = element_text(colour = "black", size = rel(1)),
legend.title = element_blank(),
legend.text = element_text(size = rel(0.6)),
axis.title.y = element_text(colour = "black", size = rel(1.2))
) +
theme(plot.title = element_text(hjust = 0.5)) +
xlab("Year") +
ylab("Regulatory Fragmentation") +
scale_color_manual(values = my_palette, name = "Company Name") +
ylim(0.70, 0.85) +
guides(col = guide_legend(title.position = "left", label.position = "right", ncol = 5)) +
geom_vline(xintercept = shockyr, linetype = "dashed", color = "red")
return(pl)
}
plot_top_companies(2014:2019, "Topic29", 2016) %>% print()yvars <- c("lead.sga_at", "lead.tfp", "lead.roa", "lead.growth", "lead.growth.at", "lead.emp_at") %>% paste0("_norm")
### we plot histogram of t-statistics
### iteration zero = actual results (red line)
### other iterations = placebo (light blue bars)
pl <- function(y, fl = "lightblue"){
data <- firm_placebo[yvar == y & variable == "regul.disp_norm"]
ggplot(data = data[iter > 0]) +
geom_histogram(aes(`t value`), bins = 50, color="#000099", fill= fl) +
theme_minimal() + xlab("T-statistics") + ylab("Count") +
geom_vline(xintercept = data[iter == 0]$`t value`, col = "red")
}
pl(yvars[1])## R version 4.2.2 (2022-10-31)
## Platform: aarch64-apple-darwin20 (64-bit)
## Running under: macOS 14.0
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRlapack.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] scales_1.2.1 flextable_0.9.0 forcats_1.0.0
## [4] stringr_1.5.0 purrr_1.0.1 readr_2.1.4
## [7] tidyr_1.3.0 tibble_3.1.8 tidyverse_2.0.0
## [10] kableExtra_1.3.4 wordcloud_2.6 psych_2.3.3
## [13] knitr_1.42 randomcoloR_1.1.0.1 rmarkdown_2.20
## [16] RColorBrewer_1.1-3 dplyr_1.1.0 ggthemes_4.2.4
## [19] lubridate_1.9.2 data.table_1.14.8 ggplot2_3.4.1
## [22] pacman_0.5.1
##
## loaded via a namespace (and not attached):
## [1] nlme_3.1-160 fontquiver_0.2.1 webshot_0.5.4
## [4] httr_1.4.7 tools_4.2.2 bslib_0.4.2
## [7] utf8_1.2.3 R6_2.5.1 colorspace_2.1-0
## [10] withr_2.5.0 tidyselect_1.2.0 mnormt_2.1.1
## [13] curl_5.0.2 compiler_4.2.2 textshaping_0.3.6
## [16] cli_3.6.0 rvest_1.0.3 xml2_1.3.3
## [19] officer_0.6.1 fontBitstreamVera_0.1.1 labeling_0.4.2
## [22] triebeard_0.4.1 sass_0.4.5 askpass_1.1
## [25] systemfonts_1.0.4 digest_0.6.31 svglite_2.1.1
## [28] gfonts_0.2.0 pkgconfig_2.0.3 htmltools_0.5.4
## [31] highr_0.10 fastmap_1.1.1 rlang_1.0.6
## [34] rstudioapi_0.14 httpcode_0.3.0 shiny_1.7.4
## [37] farver_2.1.1 jquerylib_0.1.4 generics_0.1.3
## [40] jsonlite_1.8.7 zip_2.2.2 magrittr_2.0.3
## [43] Rcpp_1.0.10 munsell_0.5.0 fansi_1.0.4
## [46] gdtools_0.3.2 lifecycle_1.0.3 stringi_1.7.12
## [49] yaml_2.3.7 Rtsne_0.16 grid_4.2.2
## [52] parallel_4.2.2 promises_1.2.0.1 crayon_1.5.2
## [55] lattice_0.20-45 hms_1.1.2 pillar_1.8.1
## [58] uuid_1.1-0 crul_1.3 glue_1.6.2
## [61] evaluate_0.20 V8_4.2.2 fontLiberation_0.1.0
## [64] urltools_1.7.3 vctrs_0.5.2 tzdb_0.3.0
## [67] httpuv_1.6.9 openssl_2.0.5 gtable_0.3.1
## [70] cachem_1.0.7 xfun_0.37 mime_0.12
## [73] xtable_1.8-4 later_1.3.0 ragg_1.2.5
## [76] viridisLite_0.4.1 memoise_2.0.1 cluster_2.1.4
## [79] timechange_0.2.0 ellipsis_0.3.2